package io.renren.modules.app.controller;

import java.util.*;

import io.renren.modules.app.annotation.Login;
import io.renren.modules.app.utils.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import io.renren.modules.app.entity.PayTypeEntity;
import io.renren.modules.app.service.PayTypeService;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;


/**
 * 支付方式表
 *
 * @date 2022-04-20 22:37:44
 */
@RestController
@RequestMapping("app/paytype")
public class PayTypeController {
    @Autowired
    private PayTypeService payTypeService;

    /**
     * 列表
     */
    @RequestMapping("/list")
    @RequiresPermissions("generator:paytype:list")
    public R list(@RequestParam Map<String, Object> params) {
        PageUtils page = payTypeService.queryPage(params);

        return R.ok().put("page", page);
    }


    /**
     * 信息
     */
    @RequestMapping("/info/{payTypeId}")
    @RequiresPermissions("generator:paytype:info")
    public R info(@PathVariable("payTypeId") Long payTypeId) {
        PayTypeEntity payType = payTypeService.getById(payTypeId);

        return R.ok().put("payType", payType);
    }

    /**
     * 保存
     */
    @RequestMapping("/save")
    @RequiresPermissions("generator:paytype:save")
    public R save(@RequestBody PayTypeEntity payType) {
        payType.setCreateTime(new Date());
        payTypeService.save(payType);

        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @RequiresPermissions("generator:paytype:update")
    public R update(@RequestBody PayTypeEntity payType) {
        payTypeService.updateById(payType);

        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    @RequiresPermissions("generator:paytype:delete")
    public R delete(@RequestBody Long[] payTypeIds) {
        payTypeService.removeByIds(Arrays.asList(payTypeIds));

        return R.ok();
    }

    /**
     * 获取充值类型
     *
     * @return
     */
    @Login
    @GetMapping("/queryPayType")
    public R queryPayType() {
        List<PayTypeEntity> list = payTypeService.list();
        return R.ok().put("payTypeList", list);
    }

    /**
     * 校验充值金额是否符合要求
     *
     * @param payType 支付方式类
     * @return 结果
     */
    @Login
    @GetMapping("/inspectionAmount")
    public Map<String, Object> inspectionAmount(PayTypeEntity payType) {
        if (StringUtils.isNull(payType.getAmount())) {
            return R.error("余额不能为空");
        }
        if (StringUtils.isNull(payType.getLogotype())) {
            return R.error("标识不能为空");
        }
        HashMap<String, Object> map = new HashMap<>();

        PayTypeEntity payTypeEntity = payTypeService.queryPayTypeBy(payType);
        //判断是否大于或者等于最小金额
        if (payType.getAmount().compareTo(payTypeEntity.getLeastAmount()) > -1) {
            map.put("code", 0);
        } else {
            map.put("code", 500);
            map.put("msg", "充值金额不能小于" + payTypeEntity.getLeastAmount());
            return map;
        }
        //判断是否小于或者等于最大金额
        if (payType.getAmount().compareTo(payTypeEntity.getUtmostAmount()) == -1) {
            map.put("code", 0);
        } else {
            map.put("code", 500);
            map.put("msg", "充值金额不能大于" + payTypeEntity.getUtmostAmount());
            return map;
        }
        return map;
    }

    /**
     * 获取支付类型详情
     */
    @GetMapping("getPayTypeById")
    public R getPayTypeById(PayTypeEntity payTypeEntity) {
        PayTypeEntity payType = payTypeService.queryPayTypeBy(payTypeEntity);
        return R.ok().put("payType", payType);
    }
}
